home *** CD-ROM | disk | FTP | other *** search
/ Aminet 40 / Aminet 40 (2000)(Schatztruhe)[!][Dec 2000].iso / Aminet / util / boot / BlizKick.lha / BlizKick / Modules / Magia.ASM < prev    next >
Assembly Source File  |  2000-09-04  |  2KB  |  109 lines

  1. ; FILE: Source:modules/Magia.ASM          REV: 7 --- Haha!
  2.  
  3. ;
  4. ; Example BlizKick Module
  5. ; ~~~~~~~~~~~~~~~~~~~~~~~
  6. ; This code shows how to create simple BlizKick "patch" Module.
  7. ; Should be quite self-explonary...
  8. ;
  9. ; !PATCHING CODE NEED NOT BE FULLY PC-RELATIVE!
  10. ;
  11. ; !PATCH CODE ITSELF NEED TO BE FULLY PC-RELATIVE!
  12. ;  (as ROM is...)
  13. ;
  14. ; Written by Harry Sintonen.
  15. ; This source code is Public Domain.
  16. ;
  17.  
  18.     incdir    "include:"
  19.     include    "blizkickmodule.i"    ; Some required...
  20.  
  21.     SECTION    PATCH,CODE
  22. _DUMMY_LABEL
  23.     BK_PTC
  24.  
  25. ; Code is run with following incoming parameters:
  26. ;
  27. ; a0=ptr to ROM start (buffer)    eg. $1DE087B8
  28. ; a1=ptr to ROM start (ROM)    eg. $00F80000 (do *not* access!)
  29. ; d0=ROM lenght in bytes    eg. $00080000
  30. ; a2=ptr to _FindResident routine (will search ROM buffer for resident tag):
  31. ;    CALL: jsr (a2)
  32. ;      IN: a0=ptr to ROM, d0=rom len, a1=ptr to resident name
  33. ;     OUT: d0=ptr to resident (buf) or NULL
  34. ; a3=ptr to _InstallModule routine (can be used to plant a "module"):
  35. ;    CALL: jsr (a3)
  36. ;      IN: a0=ptr to ROM, d0=rom len, a1=ptr to module, d6=dosbase
  37. ;     OUT: d0=success
  38. ; a4=ptr to _Printf routine (will dump some silly things (errormsg?) to stdout ;-)
  39. ;    CALL: jsr (a4)
  40. ;      IN: a0=FmtString, a1=Array (may be 0), d6=dosbase
  41. ;     OUT: -
  42. ; d6=dosbase, a6=execbase
  43. ;
  44. ; Code should return:
  45. ;
  46. ; d0=true if succeeded, false if failed.
  47. ; d1-d7/a0-a6 can be trashed. a7 *must* be preserved! ;-)
  48.  
  49.     lea    (a0,d0.l),a1        ; a1=rom end (buf)
  50.     moveq    #'A',d1
  51.     moveq    #'%',d2
  52.     moveq    #0,d0
  53. .find    cmp.l    a1,a0
  54.     bhs.b    .exit
  55.     move.b    (a0)+,d0
  56.     cmp.b    d2,d0
  57.     beq.b    .try_prompt
  58.     cmp.b    d0,d1
  59.     bne.b    .find
  60.     lsl.l    #8,d0
  61.     move.b    (a0)+,d0
  62.     lsl.l    #8,d0
  63.     move.b    (a0)+,d0
  64.     lsl.l    #8,d0
  65.     move.b    (a0),d0
  66.     cmp.l    #'Amig',d0
  67.     bne.b    .find
  68.  
  69.     subq.l    #3,a0
  70.     move.b    #'M',(a0)+
  71.     move.b    #'a',(a0)+
  72.     move.b    #'g',(a0)+
  73.     move.b    #'i',(a0)
  74.     bra.b    .find
  75.  
  76. .exit    moveq    #1,d0
  77.     rts
  78.  
  79. .try_prompt    cmp.b    #'N',(a0)
  80.     bne.b    .find
  81.     cmp.b    #4,(-2,a0)
  82.     bne.b    .try_2
  83.     cmp.b    #'>',(1,a0)
  84.     bne.b    .find
  85.     move.b    #' ',(a0)
  86.     move.b    #'#',-(a0)
  87.     move.b    #2,-(a0)
  88.     bra.b    .find
  89. .try_2    cmp.b    #'.',(1,a0)
  90.     bne.b    .find
  91.     cmp.b    #'%',(2,a0)
  92.     bne.b    .find
  93.     cmp.b    #'S',(3,a0)
  94.     bne.b    .find
  95.     cmp.b    #'>',(4,a0)
  96.     bne.b    .find
  97.     move.b    #'#',(-1,a0)
  98.     move.b    #' ',(a0)+
  99.     clr.b    (a0)
  100.     bra    .find
  101.  
  102.  
  103.     ; And this is supposed to be a nice joke!!? ;-))
  104.  
  105.     SECTION    VERSION,DATA
  106.  
  107.     dc.b    '$VER: Magia_PATCH 1.1 (11.9.96)',0
  108.  
  109.